import axios from 'axios'
import { Message } from 'element-ui'


/** 通过node的环境变量值进行不同的环境切换 */
if (process.env.NODE_ENV == 'development') {
    axios.defaults.baseURL = ''
} else if (process.env.NODE_ENV == 'production') {
    axios.defaults.baseURL = ''
}

axios.defaults.withCredentials=true

/**
 * 创建axios实例，配置请求头和请求内容类型
 */
var instance = axios.create({ timeout: 60000 })

/**
 * 请求拦截器
 * 如果存在token，则每次请求携带token
 * 这里说一下token，一般是在登录完成之后，将用户的token通过localStorage或者cookie存在本地，然后用户每次在进入页面的时候（即在main.js中），会首先从本地存储中读取token，如果token存在说明用户已经登陆过，则更新vuex中的token状态。
 * 然后，在每次请求接口的时候，都会在请求的header中携带token，后台人员就可以根据你携带的token来判断你的登录是否过期，如果没有携带，则说明没有登录过。这时候或许有些小伙伴会有疑问了，就是每个请求都携带token，那么要是一个页面不需要用户登录就可以访问的怎么办呢？其实，你前端的请求可以携带token，但是后台可以选择不接收啊！
 */
instance.interceptors.request.use(
    config => {
        return config;
    },
    error => {
        return Promise.error(error);
    }
)

/**
 * 响应拦截器
 * 捕获处理失败以及断网的异常
 */
instance.interceptors.response.use(
    response => {
        if (response.status === 200) {
            if (response.data != null && response.data.code == '200') {
                console.log('响应正常')
            } else if (response.data != null && response.data.code != '200') {
                console.log('响应异常')
                Message.warning(response.data.msg)
            } else {
                console.log('接口调用异常')
                Message.warning('接口调用异常')
            }
            return Promise.resolve(response)
        } else {
            Message.warning('接口调用异常')
            return Promise.reject(response);
        }
    },
    error => {
        Message.warning('接口调用超时')
        console.log('error response:' + error)
    }
)



export function get(url, params) {
    return new Promise((resolve,reject)=>{
        instance({
            url: url,
            method: 'get',
            params: params
        }).then(res=>{
            resolve(res.data)
        }).catch(err=>{
            reject(err.data)
        })
    })
}

export function post(url, params, headers) {
    if (headers == null) {
        headers = { 'Content-Type': 'application/json;charset=utf-8' }
    }
    return new Promise((resolve,reject)=>{
        instance({
            url: url,
            method: 'post',
            data: params,
            headers: headers
        }).then(res=>{
            resolve(res.data)
        }).catch(err=>{
            reject(err.data)
        })
    }) 
}

export default {
    instance
}